#pragma once

#ifndef IVector3_H
#define IVector3_H

//used to get the _m128 type
#include <xmmintrin.h>

#include <ostream>
using std::ostream;

//Interface class of vector
class IVector3
{
public:
	virtual ~IVector3() {};

	//getters
	inline virtual float getX() const = 0;
	inline virtual float getY() const = 0;
	inline virtual float getZ() const = 0;
	inline virtual float getW() const = 0;

	//setters
	inline virtual void set(float, float, float) = 0;

	//norme
	inline virtual float getNorme() const = 0;

	//output stream
	friend ostream& operator <<(ostream& os, const IVector3& v)
	{ 
		os<<v.getX()<<" "<<v.getY()<<" "<<v.getZ()<<" "<<v.getW();
		return os;
	};

};

#endif

